﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LAPI.Web.Controllers
{
    /// <summary>
    /// Controlador base. Tiene métodos funcionales útiles para el resto de controladores.
    /// </summary>
    public class BaseController : Controller
    {
        /// <summary>
        /// Método para controlar los permisos de sesión en accesos que necesitan perfil 'Administrador de Sistema'
        /// </summary>
        /// <returns>Objeto ResultadoAccion, con el resultado de la comprobación. Null si todo ha ido bien.</returns>
        protected LAPI.Business.Acciones.ResultadoAccion comprobarPermisoAdminSistema()
        {
            LAPI.Business.DatosSesion datosSesion = null;
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            if (Session["datosSesion"] != null)
            {
                datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                if (datosSesion.EsAdministradorSistema())
                {
                    resultado = new Business.Acciones.ResultadoAccion();
                }
                else
                {
                    resultado = new Business.Acciones.ResultadoAccion();
                    resultado.setResultado(resultado: Business.Acciones.TipoResultado.ERROR);
                    resultado.addMensaje(mensaje: "El usuario, no tiene permiso suficiente", tipoMensaje: Business.Acciones.TipoMensaje.ERROR);
                }
            }
            else
            {
                resultado = new Business.Acciones.ResultadoAccion();
                resultado.setResultado(resultado: Business.Acciones.TipoResultado.ERROR);
                resultado.addMensaje(mensaje: "Ha caducado la sesión del usuario", tipoMensaje: Business.Acciones.TipoMensaje.ERROR);
            }
            return resultado;
        }

        /// <summary>
        /// Método para controlar los permisos de sesión en accesos que necesitan perfil 'Administrador de Sistema'
        /// </summary>
        /// <returns>Vista CustomError.cshtml con el error.</returns>
        protected ActionResult comprobarErrorPermisoAdminSistema()
        {
            LAPI.Business.DatosSesion datosSesion = null;

            if (Session["datosSesion"] != null)
            {
                datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                if (datosSesion.EsAdministradorSistema())
                {
                    return null;
                }
                else
                {
                    ViewData["Error"] = "El usuario, no tiene permiso suficiente para realizar esa acción.";
                }
            }
            else
            {
                ViewData["Error"] = "Ha caducado la sesión del usuario. Por favor, entre de nuevo en LAPI.";
            }

            return View("CustomError");
        }

        /// <summary>
        /// Método para controlar los permisos de sesión en accesos que necesitan perfil 'Administrador de Pista'
        /// </summary>
        /// <returns>Objeto ResultadoAccion, con el resultado de la comprobación. Null si todo ha ido bien.</returns>
        protected LAPI.Business.Acciones.ResultadoAccion comprobarPermisoAdminPista()
        {
            LAPI.Business.DatosSesion datosSesion = null;
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            if (Session["datosSesion"] != null)
            {
                datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                if (datosSesion.EsAdministradorPistas() && datosSesion.getIdCentroDeportivo() > 0)
                {
                    resultado = new Business.Acciones.ResultadoAccion();
                }
                else
                {
                    resultado = new Business.Acciones.ResultadoAccion();
                    resultado.setResultado(resultado: Business.Acciones.TipoResultado.ERROR);
                    resultado.addMensaje(mensaje: "El usuario, no tiene permiso suficiente", tipoMensaje: Business.Acciones.TipoMensaje.ERROR);
                }
            }
            else
            {
                resultado = new Business.Acciones.ResultadoAccion();
                resultado.setResultado(resultado: Business.Acciones.TipoResultado.ERROR);
                resultado.addMensaje(mensaje: "Ha caducado la sesión del usuario", tipoMensaje: Business.Acciones.TipoMensaje.ERROR);
            }
            return resultado;
        }

        /// <summary>
        /// Método para controlar los permisos de sesión en accesos que necesitan perfil 'Administrador de Pista'
        /// </summary>
        /// <returns>Vista CustomError.cshtml con el error.</returns>
        protected ActionResult comprobarErrorPermisoAdminPista()
        {
            LAPI.Business.DatosSesion datosSesion = null;

            if (Session["datosSesion"] != null)
            {
                datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                if (datosSesion.EsAdministradorPistas() && datosSesion.getIdCentroDeportivo() > 0)
                {
                    return null;
                }
                else
                {
                    ViewData["Error"] = "El usuario, no tiene permiso suficiente para realizar esa acción.";
                }
            }
            else
            {
                ViewData["Error"] = "Ha caducado la sesión del usuario. Por favor, entre de nuevo en LAPI.";
            }

            return View("CustomError");
        }

        /// <summary>
        /// Método para controlar que el usuario esté autenticado
        /// </summary>
        /// <returns>Objeto ResultadoAccion, con el resultado de la comprobación. Null si todo ha ido bien.</returns>
        protected LAPI.Business.Acciones.ResultadoAccion comprobarPermisoSesion()
        {
            LAPI.Business.Acciones.ResultadoAccion resultado = null;

            if (Session["datosSesion"] != null)
            {
                resultado = new Business.Acciones.ResultadoAccion();
            }
            else
            {
                resultado = new Business.Acciones.ResultadoAccion();
                resultado.setResultado(resultado: Business.Acciones.TipoResultado.ERROR);
                resultado.addMensaje(mensaje: "Ha caducado la sesión del usuario", tipoMensaje: Business.Acciones.TipoMensaje.ERROR);
            }
            return resultado;
        }

        /// <summary>
        /// Método para controlar que el usuario esté autenticado
        /// </summary>
        /// <returns>Vista CustomError.cshtml con el error.</returns>
        protected ActionResult comprobarErrorPermisoSesion()
        {
            LAPI.Business.DatosSesion datosSesion = null;

            if (Session["datosSesion"] != null)
            {
                datosSesion = (LAPI.Business.DatosSesion)Session["datosSesion"];

                return null;
            }
            else
            {
                ViewData["Error"] = "Ha caducado la sesión del usuario. Por favor, entre de nuevo en LAPI.";
            }

            return View("CustomError");
        }

    }
}
